home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / menu / m_new.c < prev    next >
C/C++ Source or Header  |  2002-10-24  |  5KB  |  112 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *   Author:  Juergen Pfeifer, 1995,1997                                    *
  31.  *   Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en             *
  32.  ****************************************************************************/
  33.  
  34. /***************************************************************************
  35. * Module m_new                                                             *
  36. * Creation and destruction of new menus                                    *
  37. ***************************************************************************/
  38.  
  39. #include "menu.priv.h"
  40.  
  41. MODULE_ID("$Id: m_new.c,v 1.12 2002/07/06 15:22:16 juergen Exp $")
  42.  
  43. /*---------------------------------------------------------------------------
  44. |   Facility      :  libnmenu  
  45. |   Function      :  MENU *new_menu(ITEM **items)
  46. |   
  47. |   Description   :  Creates a new menu connected to the item pointer
  48. |                    array items and returns a pointer to the new menu.
  49. |                    The new menu is initialized with the values from the
  50. |                    default menu.
  51. |
  52. |   Return Values :  NULL on error
  53. +--------------------------------------------------------------------------*/
  54. NCURSES_EXPORT(MENU *)
  55. new_menu (ITEM ** items)
  56. {
  57.   MENU *menu = (MENU *)calloc(1,sizeof(MENU));
  58.   
  59.   if (menu)
  60.     {
  61.       *menu = _nc_Default_Menu;
  62.       menu->status = 0;
  63.       menu->rows = menu->frows;
  64.       menu->cols = menu->fcols;
  65.       if (items && *items)
  66.     {
  67.       if (!_nc_Connect_Items(menu,items))
  68.         {
  69.           free(menu);
  70.           menu = (MENU *)0;
  71.         }
  72.     }
  73.     }
  74.  
  75.   if (!menu)
  76.     SET_ERROR(E_SYSTEM_ERROR);
  77.  
  78.   return(menu);
  79. }
  80.  
  81. /*---------------------------------------------------------------------------
  82. |   Facility      :  libnmenu  
  83. |   Function      :  int free_menu(MENU *menu)  
  84. |   
  85. |   Description   :  Disconnects menu from its associated item pointer 
  86. |                    array and frees the storage allocated for the menu.
  87. |
  88. |   Return Values :  E_OK               - success
  89. |                    E_BAD_ARGUMENT     - Invalid menu pointer passed
  90. |                    E_POSTED           - Menu is already posted
  91. +--------------------------------------------------------------------------*/
  92. NCURSES_EXPORT(int)
  93. free_menu (MENU * menu)
  94. {
  95.   if (!menu)
  96.     RETURN(E_BAD_ARGUMENT);
  97.   
  98.   if ( menu->status & _POSTED )
  99.     RETURN(E_POSTED);
  100.   
  101.   if (menu->items) 
  102.     _nc_Disconnect_Items(menu);
  103.   
  104.   if ((menu->status & _MARK_ALLOCATED) && menu->mark)
  105.     free(menu->mark);
  106.  
  107.   free(menu);
  108.   RETURN(E_OK);
  109. }
  110.  
  111. /* m_new.c ends here */
  112.